//
//  WBStatusListViewModel.swift
//  仿微博
//
//  Created by apple on 2016/12/21.
//  Copyright © 2016年 apple. All rights reserved.
//

import Foundation

/// 微博数据列表视图模型
/*
 
 父类的选择
 - 如果类需要使用 ‘KVC’ 或者字典转模型框架设置对象值 ，类就需要继承  NSObject
 - 如果类只是包装一些代码逻辑（写了一些函数）， 可以不用任何父类 ，好处： 更加轻量级
 - 提示：如果用  OC 写， 一律都继承自 NSObject 即可
 
 
 使命： 负责微博的数据处理
 1.字典转模型
 2.下拉/上拉刷新 数据处理
 
 */
///上拉刷新最大尝试次数

 private let maxPullupTryTimes = 3

class WBStatusListViewModel {
    
    
    /// 微博模型数据懒加载
    lazy var statusList = [WBStatus]()
    ///上次刷新错误次数
    private var PullupErrorTimes = 0
    /// 加载微博列表
    ///
    ///   - pullup: 是否上拉刷新标记
    /// - Parameter completion: 完成回调【网络请求是否成功, 是否刷新表格】
    
    func loadStatus(pullup: Bool, completion: @escaping (_ isSuccess: Bool, _ shouldRefresh: Bool)->()) {
        
        //判断是否是上拉刷新个，同是检查刷新错误
        if pullup && PullupErrorTimes > maxPullupTryTimes{
        
        completion(true, false)
        return
        
        }
        
        
        
       // since_id 取出数组中第一条微博的 id
        let since_id = pullup ? 0 : statusList.first?.id ?? 0
        //上拉刷新,取出数组的最后一条微博的 id
        let max_id = !pullup ? 0 : statusList.last?.id ?? 0
        
    WBNetworkManager.shared().statusList(since_id: since_id, max_id: max_id) { (list, isSuccess) in
        guard let array = NSArray.yy_modelArray(with: WBStatus.self, json: list ?? [] ) as? [WBStatus] else{
            completion(isSuccess, false)
            return
        }
        print("刷新到 \(array.count) 条微博")
        //2.  拼接数据
        if pullup {
            //上拉刷新，应该将结果数组拼接在数组末尾
            self.statusList += array
        }else{
            //下拉刷新，应该将结果数组拼接在数组前面
            self.statusList = array + self.statusList
        }
        // 判断上拉刷新的数量
        if pullup && array.count == 0 {
        self.PullupErrorTimes += 1
            completion(isSuccess, false)
        }else{
            //3.完成回调
            completion(isSuccess, true)
        }
        
    }
 
    }
}
